home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / procssng / ccs / ccs-11tl.lha / lbl / hips / sources / 3dscale_geom / window.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-08-30  |  1.9 KB  |  93 lines

  1.  
  2. #include "simple.h"
  3. #include "window.h"
  4.  
  5. static char rcsid[] = "$Header: window.c,v 2.0 88/10/10 13:46:29 ph Locked $";
  6.  
  7. window_set(x0, y0, z0, x1, y1, z1, a)
  8. register Window *a;
  9. {
  10.     a->x0 = x0;
  11.     a->y0 = y0;
  12.     a->z0 = z0;
  13.     a->x1 = x1;
  14.     a->y1 = y1;
  15.     a->z1 = z1;
  16. }
  17.  
  18. window_clip(a, b)        /* a=intersect(a,b), return overlap bit */
  19. register Window *a, *b;
  20. {
  21.     int overlap;
  22.  
  23.     overlap = window_overlap(a, b);
  24.     window_intersect(a, b, a);
  25.     return overlap;
  26. }
  27.  
  28. window_intersect(a, b, c)    /* c = intersect(a,b) */
  29. register Window *a, *b, *c;
  30. {
  31.     c->x0 = MAX(a->x0, b->x0);
  32.     c->y0 = MAX(a->y0, b->y0);
  33.     c->z0 = MAX(a->z0, b->z0);
  34.     c->x1 = MIN(a->x1, b->x1);
  35.     c->y1 = MIN(a->y1, b->y1);
  36.     c->z1 = MIN(a->z1, b->z1);
  37. }
  38.  
  39. window_overlap(a, b)
  40. register Window *a, *b;
  41. {
  42.     return a->x0<=b->x1 && a->x1>=b->x0
  43.     && a->y0<=b->y1 && a->y1>=b->y0
  44.     && a->z0<=b->z1 && a->z1>=b->z0;
  45. }
  46.  
  47. window_print(str, a)
  48. char *str;
  49. Window *a;
  50. {
  51.     fprintf(stderr,"%s{%d,%d,%d,%d,%d,%d}%d,%d,%d",
  52.     str, a->x0, a->y0, a->z0, a->x1, a->y1, a->z1,
  53.     a->x1-a->x0+1, a->y1-a->y0+1, a->z1-a->z0+1);
  54. }
  55.  
  56. /*----------------------------------------------------------------------*/
  57.  
  58. window_box_intersect(a, b, c)
  59. register Window_box *a, *b, *c;
  60. {
  61.     c->x0 = MAX(a->x0, b->x0);
  62.     c->y0 = MAX(a->y0, b->y0);
  63.     c->z0 = MAX(a->z0, b->z0);
  64.     c->x1 = MIN(a->x1, b->x1);
  65.     c->y1 = MIN(a->y1, b->y1);
  66.     c->z1 = MIN(a->z1, b->z1);
  67.     window_box_set_size(c);
  68. }
  69.  
  70. window_box_print(str, a)
  71. char *str;
  72. Window_box *a;
  73. {
  74.     fprintf(stderr,"%s{%d,%d,%d,%d,%d,%d}%d,%d,%d",
  75.     str, a->x0, a->y0, a->z0, a->x1, a->y1, a->z1, a->nx, a->ny, a->nz);
  76. }
  77.  
  78. window_box_set_max(a)
  79. register Window_box *a;
  80. {
  81.     a->x1 = a->x0+a->nx-1;
  82.     a->y1 = a->y0+a->ny-1;
  83.     a->z1 = a->z0+a->nz-1;
  84. }
  85.  
  86. window_box_set_size(a)
  87. register Window_box *a;
  88. {
  89.     a->nx = a->x1-a->x0+1;
  90.     a->ny = a->y1-a->y0+1;
  91.     a->nz = a->z1-a->z0+1;
  92. }
  93.